package com.socioboard.t_board_pro.fragments; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import org.achartengine.ChartFactory; import org.achartengine.chart.PointStyle; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.BasicStroke; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.graphics.Color; import android.graphics.Paint.Align; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.socioboard.t_board_pro.util.EntityModel; import com.socioboard.t_board_pro.util.MainSingleTon; import com.socioboard.t_board_pro.util.TboardproLocalData; import com.socioboard.tboardpro.R; public class FragmentsStatistics extends Fragment { View rootview; TboardproLocalData tboardproLocalData; ArrayList<EntityModel> arralistEntityModels; String timeTitle = ""; View mChart; long maxLimit = 0; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootview = inflater.inflate(R.layout.fragment_stats, container, false); tboardproLocalData = new TboardproLocalData(getActivity()); arralistEntityModels = tboardproLocalData .getAllUsersEntity(MainSingleTon.currentUserModel.getUserid()); // arralistEntityModels.clear(); arralistEntityModels.add(0, new EntityModel(0, 0, 0, 0)); // arralistEntityModels.add(new EntityModel(20, 30, 40, 50)); // arralistEntityModels.add(new EntityModel(66, 30, 80, 150)); // arralistEntityModels.add(new EntityModel(45, 30, 42, 180)); openChart2(); return rootview; } private void openChart2() { long[] followers = new long[arralistEntityModels.size()]; long[] followings = new long[arralistEntityModels.size()]; long[] mutualFollowers = new long[arralistEntityModels.size()]; long[] nonFollowers = new long[arralistEntityModels.size()]; System.out.println("arralistEntityModels " + arralistEntityModels); for (int i = 0; i < arralistEntityModels.size(); i++) { followers[i] = arralistEntityModels.get(i).getFollowers(); followings[i] = arralistEntityModels.get(i).getFollowings(); mutualFollowers[i] = arralistEntityModels.get(i).getMutuals(); nonFollowers[i] = arralistEntityModels.get(i).getNonfollwers(); if (arralistEntityModels.get(i).getFollowers() > maxLimit) { maxLimit = arralistEntityModels.get(i).getFollowers(); } if (arralistEntityModels.get(i).getFollowings() > maxLimit) { maxLimit = arralistEntityModels.get(i).getFollowings(); } if (arralistEntityModels.get(i).getMutuals() > maxLimit) { maxLimit = arralistEntityModels.get(i).getMutuals(); } if (arralistEntityModels.get(i).getNonfollwers() > maxLimit) { maxLimit = arralistEntityModels.get(i).getNonfollwers(); } } maxLimit = maxLimit + 10; System.out.println("maxLimit = " + maxLimit); XYSeries xySeriesfollower = new XYSeries("Followers"); XYSeries xySeriesfollowings = new XYSeries("Followings"); XYSeries xySeriesmutualFollowers = new XYSeries("MutualFollowers"); XYSeries xySeriesnonFollowers = new XYSeries("NonFollowers"); // Adding data to Income and Expense Series for (int i = 0; i < arralistEntityModels.size(); i++) { xySeriesfollower.add(i, followers[i]); xySeriesfollowings.add(i, followings[i]); xySeriesmutualFollowers.add(i, mutualFollowers[i]); xySeriesnonFollowers.add(i, nonFollowers[i]); } // Creating a dataset to hold each series XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); dataset.addSeries(xySeriesfollower); dataset.addSeries(xySeriesfollowings); dataset.addSeries(xySeriesmutualFollowers); dataset.addSeries(xySeriesnonFollowers); // Creating XYSeriesRenderer to customize incomeSeries XYSeriesRenderer rendererfollowers = new XYSeriesRenderer(); rendererfollowers.setColor(Color.CYAN); // color of the graph set to // cyan rendererfollowers.setFillPoints(true); rendererfollowers.setLineWidth(2f); rendererfollowers.setDisplayChartValues(true); // setting chart value distance rendererfollowers.setDisplayChartValuesDistance(10); // setting line graph point style to circle rendererfollowers.setPointStyle(PointStyle.POINT); // setting stroke of the line chart to solid rendererfollowers.setStroke(BasicStroke.SOLID); // Creating XYSeriesRenderer to customize expenseSeries XYSeriesRenderer rendererFollowings = new XYSeriesRenderer(); rendererFollowings.setColor(Color.GREEN); rendererFollowings.setFillPoints(true); rendererFollowings.setLineWidth(2f); rendererFollowings.setDisplayChartValues(true); // setting line graph point style to circle rendererFollowings.setPointStyle(PointStyle.POINT); // setting stroke of the line chart to solid rendererFollowings.setStroke(BasicStroke.SOLID); XYSeriesRenderer rendererMutualFollowers = new XYSeriesRenderer(); rendererMutualFollowers.setColor(Color.YELLOW); // color of the graph // set to cyan rendererMutualFollowers.setFillPoints(true); rendererMutualFollowers.setLineWidth(2f); rendererMutualFollowers.setDisplayChartValues(true); // setting chart value distance rendererMutualFollowers.setDisplayChartValuesDistance(10); // setting line graph point style to circle rendererMutualFollowers.setPointStyle(PointStyle.POINT); // setting stroke of the line chart to solid rendererMutualFollowers.setStroke(BasicStroke.SOLID); // Creating XYSeriesRenderer to customize expenseSeries XYSeriesRenderer rendererNonFollowers = new XYSeriesRenderer(); rendererNonFollowers.setColor(Color.RED); rendererNonFollowers.setFillPoints(true); rendererNonFollowers.setLineWidth(2f); rendererNonFollowers.setDisplayChartValues(true); // setting line graph point style to circle rendererNonFollowers.setPointStyle(PointStyle.POINT); // setting stroke of the line chart to solid rendererNonFollowers.setStroke(BasicStroke.SOLID); // Creating a XYMultipleSeriesRenderer to customize the whole chart XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); multiRenderer.setXLabels(0); multiRenderer.setChartTitle("Followers Analysis"); multiRenderer.setXTitle("Year 2015"); multiRenderer.setYTitle("Followers List"); /*** * Customizing graphs */ // setting text size of the title multiRenderer.setChartTitleTextSize(28); // setting text size of the axis title multiRenderer.setAxisTitleTextSize(20); // setting text size of the graph lable multiRenderer.setLabelsTextSize(12); // setting zoom buttons visiblity // multiRenderer.setZoomButtonsVisible(true); // setting pan enablity which uses graph to move on both axis // multiRenderer.setPanEnabled(false, false); // setting click false on graph multiRenderer.setClickEnabled(false); // setting zoom to false on both axis // multiRenderer.setZoomEnabled(true, true); // setting lines to display on y axis multiRenderer.setShowGridY(true); // setting lines to display on x axis multiRenderer.setShowGridX(true); // setting legend to fit the screen size multiRenderer.setFitLegend(true); // setting displaying line on grid multiRenderer.setShowGrid(true); // setting zoom to false multiRenderer.setZoomEnabled(false); // setting external zoom functions to false multiRenderer.setExternalZoomEnabled(false); // setting displaying lines on graph to be formatted(like using // graphics) multiRenderer.setAntialiasing(false); // setting to in scroll to false multiRenderer.setInScroll(false); // setting to set legend height of the graph multiRenderer.setLegendHeight(30); // setting x axis label align multiRenderer.setXLabelsAlign(Align.CENTER); // setting y axis label to align multiRenderer.setYLabelsAlign(Align.LEFT); // setting text style multiRenderer.setTextTypeface("sans_serif", Typeface.NORMAL); // setting no of values to display in y axis multiRenderer.setYLabels(10); // setting y axis max value, Since i'm using static values inside the // graph so i'm setting y max value to 4000. // if you use dynamic values then get the max y value and set here multiRenderer.setYAxisMax(maxLimit); // setting used to move the graph on xaxiz to .5 to the right // multiRenderer.setXAxisMin(0.5); // setting used to move the graph on xaxiz to .5 to the right multiRenderer.setXAxisMax(arralistEntityModels.size()); // setting bar size or space between two bars multiRenderer.setBarSpacing(0.5); // Setting background color of the graph to transparent multiRenderer.setBackgroundColor(Color.BLACK); // Setting margin color of the graph to transparent multiRenderer.setMarginsColor(getResources().getColor( android.R.color.transparent)); multiRenderer.setApplyBackgroundColor(true); multiRenderer.setScale(2f); // setting x axis point size multiRenderer.setPointSize(4f); // setting the margin size for the graph in the order top, left, bottom, // right multiRenderer.setMargins(new int[] { 30, 30, 30, 30 }); DateFormat dateFormat = new SimpleDateFormat("MM/dd"); for (int i = 0; i < arralistEntityModels.size(); i++) { Date date = new Date(arralistEntityModels.get(i).getMillis()); System.out.println(dateFormat.format(date)); // 2014/08/06 if (i == 0) { multiRenderer.addXTextLabel(i, "" + 0); } else { multiRenderer.addXTextLabel(i, dateFormat.format(date)); } } // Adding incomeRenderer and expenseRenderer to multipleRenderer // Note: The order of adding dataseries to dataset and renderers to // multipleRenderer // should be same multiRenderer.addSeriesRenderer(rendererfollowers); multiRenderer.addSeriesRenderer(rendererFollowings); multiRenderer.addSeriesRenderer(rendererMutualFollowers); multiRenderer.addSeriesRenderer(rendererNonFollowers); multiRenderer.setPanEnabled(false, false); multiRenderer.setYAxisMin(0); multiRenderer.setXAxisMin(0); // this part is used to display graph on the xml LinearLayout chartContainer = (LinearLayout) rootview .findViewById(R.id.chart); // remove any views before u paint the chart chartContainer.removeAllViews(); // drawing bar chart System.out.println("dataset " + dataset.toString()); System.out.println("multiRenderer " + multiRenderer.toString()); mChart = ChartFactory.getLineChartView( FragmentsStatistics.this.getActivity(), dataset, multiRenderer); mChart.setClickable(false); // adding the view to the linearlayout chartContainer.addView(mChart); // Creating an intent to plot bar chart using dataset and // multipleRenderer } }